perm filename OCT9.TEX[TEX,ALS] blob sn#616939 filedate 1981-10-09 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00007 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	\input basic
C00005 00003	Computers Revisited.
C00081 00004	SLIDE 1. A bit of history
C00083 00005				   Computers Revisited
C00088 00006	How to Become a Computer Programmer in One Easy Lesson
C00089 00007	program YIELD(OUTPUT)
C00090 ENDMK
C⊗;
\input basic
%\input kermac.tex
%\input papmac

%chpar12=1100				% Use magnify, not this !!!
\magnify{1200}				% Now this is ok.

\font V=timesroman at 18truebp
\def\Tit{\:V}
\def\<#1>{{\:m <#1>}\¬}
\def\lv{\:B}
\def\te{\:a}
\def\ni{\:b}
\def\ei{\:m}
\def\se{\:d}
\def\si{\:c}
\def\s8{\:p}
\def\it{\:?}

	% Change formats:
\def\sectionbeginb#1#2{\addq1{\varsec}
	\sectiondeclare{\tit\hangindent4.5em\sectionnum.\ \ #1\¬
		      }{\sectionnum\hquad #2
		      }{\sectionnum\hquad #2} }
\def\subsectionbeginb#1#2{\addq1{\varssec}
	\subsectiondeclare{\tenpoint\bf\hangindent4.5em\subsecnum\hquad\rm #1
			 }{\subsecnum\hquad #2}}

\setmargin{1truein}{1.25truein}{.9375truein}{.9375truein}
	% Modified to moveright the even pages only with hshft set to .45
% \def\shftthepage#1{
%	\ddvnmsel{\moveright\hshft truein\thevbox{#1}}{\thevbox{#1}} }


	% To produce special TEX printing and imitations
\def\TEX{\hbox{\:aT\hskip-.1667em\lower.424ex\hbox{E}\hskip-.125em X}}
\def\DEK{\hbox{\:aD\hskip-.1667em\lower.424ex\hbox{E}\hskip-.125em K}}
\def\MAX{\hbox{\:aM\hskip-.2000em\lower.424ex\hbox{A}\hskip-.200em X}}
\def\ALS{\hbox{\:a \lower.424ex\hbox{A}\hskip-.1667em\hbox
                                    {L}\hskip-.1667em\raise.424ex\hbox{S}}}

	% Initializations
\def\projname{Short WAITS}
\def\date{January 16, 1981}
	% Set parameters to taste:
\parskip .1in
\parindent 0pt
% \def\hshft{.45}
	% To change spacing on contents page
\def\hdltopskip{-0.05in}
\def\hdlbtmskip{0.10vu plus 2pt}
	% To change table of contents to eightpoint
\let\tofctypeface=\ninepoint

\secsubsecstyle

% \chcode'20←13
% \def\⊂#1⊃{\indexk{#1}}
% mtex.dmp[1,3].
Computers Revisited.

I have a confession to make.  I am not going to be able to make all of you
into computer programmers in one easy lesson.  That was simply a come-on
to get a few of you to come hear me talk.  The come-on seems to have
worked as judged by the number of you here tonight.

As you know, this is will be the second time that I have talked on
computers at The Sequoias.

When I was asked to give this second talk, there was some discussion as to
whether it would be more appropiate for me to give it on a Monday evening
under the auspices of the Education Committee or on a Friday.  Apparently,
both the Education Committee and the Entertainment Committee though that
it would be funny to see me trying to explain computers and computer
programming to my fellow Sequoians.  

So I am here tonight as an entertainer. Do you think that's funny?  I
don't.  I intend to have the last laugh and to demonstrate
that Sequoians are after all quite capable of understanding computers.

The problem in trying to make you all into programmers is not that
computers are too complicated but rather that they are too simple, that is
too simple minded and it takes a lot of patience and attention to detail
to tell this simple-minded device how to do anything at all. We will not
have time to go into all of the detail but we can and will make a start.

If you really want to understand all the details of the inner workings of
a computer, you will have to go back to school and study electrical
engineering and computer science.  If you already know calculus, perhaps a
two year course might suffice.  Fortunately, you do not have to become
computer wizzards to understand what computers are all about, and yes,
even perhaps to write a computer program and to run it on a computer.

How many of you understand how your television set works?  Never-the-less
you feel quite comfortable using it.  You do not fear your television set
and you do not blame it for the poor quality of the program material that
it presents.  You do blame the people who produced the programs.  So
please, when someone tells you that something is the fault of the
computer, please, don't believe him. Some person is always at fault,
either the person who supplied the input facts and figures to the computer
or in some few cases it is the person who wrote the programs that
instructed the computer what to do with these input figures.

Will it help, if I tell you that the basic principles of the modern
digital computer were first suggested by an Englishman, Charles Babbage,
in 1833.  Yes I said 1833, not 1933.  Furthermore the first really clear
explanation of these principles were written in 1844 by Lady Lovelace, the
28 year old daughter of Lord Byron, the English poet.  If Ada Augusta, the
countess of Lovelace could understand the principles of the modern
computer some 100 years before it was built, surely you should be able to
do this today.

Not only did Lady Lovelace understand the principles of the computer but
she was the first computer programmer.  Her program to compute the
Bernoulli numbers followed a procedure that is still used today.
Unfortunately, Babbage, poor man, was never able to finish his machine and
Lady Lovelace was never able to demonstrate that her program was indeed
correct.  Babbage's machine was to be built out of levers and gears, the
modern vacuum tube and the transistor were, of course, unknown, and the
state of the art in his day was simply not up to the task.  Indeed, even
today, it would be very difficult to build a a workable model of Babbage's
machine.

As an aside, I must tell you that the first computer program that I ever
wrote was for a machine that never was built.  But fortunately for me,
computers were very soon to become available and I have since been able to
write and run many programs on many different machines.

Although Charles Babbage is usually credited with the invention of the
digital computer, its origins go back much further, back even to the dawn
of recorded history.  Keeping records is perhaps some of the dullest of
the repetative work that falls to the lot of the office worker.  This has
always been so, and it has always led to the development of mechanized
aids.

In fact, if one goes back far enough, it seems that the invention of
writing itself was prompted by the need to keep accounts. The oldest
surviving written records, dating from some 5000 years ago, were primative
books of accounts inscribed on clay tablets by the Sumarians.  Curiously,
one of the earliest written records that was not of this type contained a
lament for the ``good old days'' and a statement that the world was going
to the dogs because chidren no longer obeyed their parents.

Even in Egypt, where most of the early records that have survived are on
temple walls and are praises of the Pharohs and of the Gods, the real
reason for the invention of their form of writing is thought to be to
preserve survey records of land holdings during the annual flooding of the
Nils.  The preservation of historical and cultural information could well
be left to oral transmission, but when it came to settling disputes
between adjacent land owners, nothing took the place of a written record.

Along with writing, there has been a continuing attempt to build
machanical devices to supplement and replace man's ability to do
arithmetic.  Perhaps the earliest device that has survived to this day is
the abacus.  The abacus came from the orient and although it was several
thousand old by that time, it was not introduced into Europe until around
1000 A.D.  Its design is based on the method we use today of representing
numbers known as ``positional notation''.  Positional notation was
introduced to the west by the Arabs.  You all know and use this method of
writing numbers although you may be in a similar position of the man who
discovered rather late in life that he spoke in prose.

If you do not understand the importance of positional notation, just try
to multiply two Roman numbers say MDCXVII BY MDCCLVIII without first
converting them to the conventional positional notation.

I mention this matter because computers use positional notation and in
fact it is one of the factors that distinguishes them from another form of
computer that is currently quite out of favor, the analogue computer.

Since Babbage's machine, which he called the Analytical Engine, was to be
the first true computer, as contrasted with the calculators which he and
others had built and which are so popular today, it might be well to stop
here and to point out the distinction between a calculator and a computer.
The most apparent distinction is one of size and cost but this distinction
is becoming blurred as more and more elaborate calculators come on the
market and as computers become smaller.  To clarify your thinking, I want
to draw a sharp distinction between the two classes of devices.

To be called a computer, a device must, 1) be able to store a complete set
of instructions, a program, if you will, that is supplied ahead of time,
together with any necessary input data on which the computation is to be
done, and 2) the device must be able to alter the course of the
computation, on the basis of intermediate results that it computes, all
this with out further human intervention after the execution has begun.

One gets the impression that the computer has the property of being able to
make decisions.  Now notice carefully, the computer does not have a will
of its own and in really can not decide anything; the real decision was
made by the person who wrote the set of instructions.  So do not credit
the computer with having any human attributes.  Never-the-less, the
human-made decision was a conditional one and the programmer will not know
in advance exactly how the computation will procede. So we still call the
part of the computer that handles conditional statements the decision unit
and we unfortunately, use human related terms when talking about the
computer and say that the computer deciding when what it is doing is
simply slavishly following instructions.

Lady Lovelace was fully aware of the need for these properties in order
for the Analytical Engine to perform its intened functions.

Before we leave Lady Lovelace let me quote something that she once wrote:
``The Analytical Engine has no pretentions whatever to originate anything.
It can do whatever we know how to order it to do.''  This is as true today
of the modern digital computer as when it was written.  This seems to set
a serious limit to what a computer can do.  It also puts the blame for any
failure of the computer to perform some desired task directly upon man's
lack of knowledge as to how to order it to do the desired task.

No real progress was made in the realization of Babbage's ideas from the
time of his death in 1871 until the early 1940's although the technology
had developed to the state that successful computers could have been made
perhaps as early as 1930.  Calculators had become fashionable. Most of
these were mechanical but a few companies did make electronic devices of
this sort.  The computing needs of the war years forced people to wake up
to the situation and work was started in several places on true computers.
Contrary to what is generally assumed, none of the computer projects that
were startd during this period ever came to fruition in time to have any
effect on the war effort. By the end of the war several groups, both in
this country and abroad, were well on the way to the construction of
working machines embodying all of Babages's principles and during the
early 1950's the computer age actually came into being.

During the last 15 or 20 years, there has been some truely fantastic
develpoments in the production of very small silicon chips with thousands
of circuit elements that compress into the size of your little finger nail
all of the circuits that formerly would occupied an entire roon.  Not only
has the size come down but the cost have come down by an equally fantastic
amount.  By way of comparison, if automobiles had come down in cost by the
same amount during the last 30 years, from 1951 to 1981, you would now be
able to buy a Roles Royce for a dollar and a half.  Unfortunately, a
computer must also have input and output devices and these have not yet
been reduced in price by any really significant amount.  Never-the-less
one is now able to buy an entire computer at less than one thousandth of
the price of the same amount of computing power as in 1951.

I could easily spend an entire evening talking about these marvelous new
silicon chips. The story began with the invention of the transistor in the
late 1940's at the Bell Telephone Labatories. Many industrial
organizations were involved in the application of these devices to
computers.  During recent years, the center of activity in the device
technology has shifted to this general area so much so 
that Santa Clara valley is now referred to as being SILICON VALLEY.

The very advances that have reduced the cost of computers have also
spawned the modern vest pocket calculator.  Recently the manufacturers of
these very handy devices have been adding features to these devices so
that they actually are becoming computers.  Sam Vaughn has one of these
interesting devices.  They differ from the more general purpose computer,
that I am going to be talking about, in that they do not usually have
normal typewriter key boards, but have the same type of keys as do their
near relative, the un-dressed-up calculator.  To store a program in one of
these devices, one goes through the operations that one wants done just as
one would do if one were solving the problem on a calculator instead of
describing the operations to be performed on a typewriter key board.

I must also not forget to mention the development of electronic games
which are loosly called computer games.  Many of these do, in fact, have
the necessary sophistication to be called computers, but they are special
purpose computers that can be programmed to do only certain things, namely
to play games, and the programs are usually supplied in the form of
cassettes or cartridges so that all the user has to do is to plug them in.

As still another aside, I was involved in writing programs for one of these
game machines for a while.  Unfortunately, the machine that my programs ran on
was too expensive and most of the games were too intelectual for the mass 
market and so this machine is no longer on the market.  I did toy with the
idea of accepting an offer from the ATARI people but my interests
really did not coincide with what thet wanted me to do.  I guess I am getting
to be a bit of an old foggy and I am no longer with it.

Finally, there are a number of real computers coming on the market, many
of them the product of SILICON VALLEY, and they are coming down in price
so that many of you will be getting interested before you know it.  It is
time to begin to think about it.

But let's get on with our problem of writing a program for a modern
computer.

I have said that a computer is very simple minded and that because of
this, it is very hard to get it to do anything at all.  How is it, then,
that I have any hope at all of being able to tell you how to write a
computer program. Fortunately, this problem has been pondered over by a
great many people.  During the course of time, a body of auxillary
programs have been developed that the new user can use and that greatly
simplify the problem of using a computer.  One can now write programs in a
way that is much closer to ordinary English and these auxillary programs
will act as go-betweens in translating the user's program into the
language that the computer understands.

If this sounds just too complicated, consider an analogy.  You do not
speak a word of Urdu and you have acquired a new servant who only
understands Urdu.  How are you to communicate your wishes to this new
servant? say to tell him to draw water for your bath and to put out your
dress-up clothes to wear for dinner at The Sequoias.

Hiring a translator who knows both languages would be one solution. Since
the translator might not always be available when you needed him, a better
solution will be for you to get a professional linguist to write a
complete set of detailed instructions that tell how to translate requests
made in English into Urdu.  I am calling this person a linguist rather
than a translator both to distinguish him fron the translator and to
emphasize that the task that he is called on to do is a much more
difficult task than that assigned to the translator.  He must know a great
deal about the structure of languages and he must be able to anticipate
all of the kind of things you are apt to say.  A translator could always
stop you and say that he did not understand one of you commands but the
linguist is denyed this recourse.

You might think that this set of instructions should be in English but you
are a busy person and besides you, being human, tend to make many
mistakes.  Your new servant , on the other hand, is less busy than you
are, he is extremely fast at doing simple things and he never makes any
mistakes. So it seems better to have the linguist write these
instructions in Urdu.

If the linguist were asked to allow for the full possible range of
English words and of English sentence structures, he would find the task
very difficult indeed and his set of instructions would be so voluminous
that the poor servant would be quite unable to find his way thorugh them.
A reasonable course of action will be to for you and the linguist to decide
upon some subset of English that you will agree to use, and that will
be adequate to say all of the things that you might want to say to
your servant. After all, you will not be wanting to quote poetry or give
a lecture to your servant on The Politics of Paleoanthropology.

But there is a problem.  The linguist's instructions are be apt to be so
complicated that it will take your servant much longer to translate your
instructions from this sub-set of English into Urdu than it will take him
to execute the instructions, once translated.  It might, therefore, be
desirable to have your servant spend some time in advance in translating
some more-or-less standard sets of instructions from English into Urdu in
his spare time and before you were actually ready for him to execute these
instructions.

You might give him one set of instructions that you might call DINNERDRESS
and ask him to translate this into Urdu.  But now we face still another
problem, how are you to tell him to translate these instructions rather
than to execute them?  Well, this calls for still another set of
instructions that you will have to have the linguist write.  This set of
instructions might be called COMPILE.  So you would say COMPILE
DRINNERDRESS. The servant would then read the linguist's instructions
which he would find in his private file indexed under COMPILE, and he
would follow these instructions treating your request as input data and
produce a new set of Urdu instructions which he would file away for
possible future use.

Since your servant will want to keep your original set of instructions as
well as his own set in URDU, he will have to have some way to identify
each set, so he might call the English set DINNERDRESS.ENG and the Urdu
set DINNERDRESS.URD.  

But we are now assuming that your new servant is smart enough to organige
a file system and to store and retrieve information from these files.  But
he is quite uneducated in such matters and he will have to be supplied
with instructions as to how to do this.  This calls for some more
specialized instructions.  Your linguist might write these instructions in
Urdu.  If you have some ideas as to a better filing system, you could even
write them in your sub-set of English, and your servant could COMPILE them
into Urdu. So some instruction sets tell the servant how to deal with other
instruction sets that themselves tell what to do with still other
instruction sets, etc.

Now this servant that we are talking about is realy a computer, and these
sets of instructions are called programs.  While computers are still not
able to draw your bath and to put out your dinner clothes (they may be
some day) there are many things that they can do and the problem of
instructing them to do these things is every bit as complicated as the
problem of instructing the Urdu speaking servant.

As you have already surmised, a large body of service programs are usually
already available for use with any particular computer long before the
ultimate user ever gets to see it. In the early days, the manufacturers of
the computers established a fixed price for their computers that included
these service programs and it was impossible to buy the bare computer,
called the hardware, without also buying some of these programs.

The use of the word hardware for the physical parts of the computer is, of
course, in keeping with the basic meaning of the word.  The use of the
word software to mean the associated programs is a bit of useful computer
jargon.  Perhaps it will help you to keep the distinction between these
two terms in mind I tell you that in the early days when these terms were
just coming into use, a few programmers tried to introduce the term
underwear to mean those intimate parts of software that are commonly used
to hide the the computer's hardware from the direct view of the user. The
programs that the users writes would then be analogous to the different
types of outer wear that you put on when you dress for dinner or when you
dress to work in your garden.

More recently, a number of separate software companies have come into
being and the manufacturers are now required to price their hardware and
software separately.  This was called unbundling.  As a matter of fact,
this unbundling would have happened anyway without government intervention
because the cost of the computer hardware has coming down dramatically
while the needs for more and more software has been going up and up.  The
main part of software that originally came with the machine and that must
now be purchased separately is usually called the Operating System.

Many man-years of effort go into the writing of these service programs and
they are then available to all future users of the computer, of course for
a price, but without the user having to get involved in their detailed
design.  In fact many commercial users of computing equipment buy all of
the programms that they use and the people who operate the computer do not
need to know anything at all about programming.

By now, a computer with this body of associated service program is all too
often simply thought of as being The Computer. So when an inadequate
amount of software has been provided to handle some situation that has
arisen, the common explanation is that the computer has made a mistake.
Not so, some person has made a mistake!

I am now about ready to show you how to write a program.  But maybe I
should review what I have been saying and show you a few slides.

I started out by recounting a bit of history.

SLIDE 1. A bit of history

1000 B.C.  The Abacus 
1642-1700 Early calculators 
1833 The Analytic Engine
1939-1945 Early computers 
1950 First commercial computers

Perhaps you would like to see a picture of Charles Babbage.

SLIDE 2. Charles Babbage

Isn't he a sour looking man? He was misunderstood by his contemporaries
and he quarrelled with many of them.  His imagination and vision was
unbounded, but his judgement was far from good and his impatience made him
intolerant of those who failed to sympathize with all his projects.  He
died an embittered and unhappy man.  He was a man ahead of his time and it
was not until seventy five years after his death that a machine using his
principles actually came into being.

Now a more pleasant visage, that of Lady Lovelace.

SLIDE 3. Lady Lovelace

Remember, this is the young lady who was able to explain the principles of
programming a modern computer 100 years before it was built.

So now, one hundred ears later, we have this new servant the computer
that sometimes appears so all powerful that some people refer to as a new
specie and actually develop a paranoid fear of what is after all only a
tool. By itself, the computer is quite incapable of doing anything at all.
Lady Lovelace expressed this fact very succinctly when she wrote:

SLIDE 4. The Analytical Engine has no pretensions whatever to originate
anything. It can only do whatever we know how to order it to perform.

We might elaborate on this a bit and list some of the characteristics of
this new servant.

SLIDE 5. This Strange New Specie 
The Ideal Servant 
No will of its own
Unfailingly obedient 
Very fast and accurate 
Never sleeps, never tires 
No imagination, no emotions 
Perfect memory, instant recall

If the computer is such a perfect servant, why then do we have troubles
that are blamed on the computer?

SLIDE 6. What's Wrong when Computers Get Blamed 
Users do not understand the system 
Programmer did not anticipate some situations 
Fraud protection features inhibit changes 
Clerks are lazy and take easy way out

This might be a good place to remind you as to why we need
computers.

SLIDE 7. Why we need computers 
People are too slow 
People make mistakes
People are too expensive 
Not enough people

In fact, the complicated business systems that have developed within the
last thirty years simply could not be operated without the use of the
computer. Can you imagine 500,000 clerks in a big room making entries by
pen and ink in 500,000 ledgers and keeping track of the Social Security
payrool deductions for 40 million people and still having time to write
and mail checks by hand to many of us here at The Sequoias, all this
without making millions of errors every year.  The Social Security Agency
does make mistakes from time to time but almost all of their mistakes are
people mistakes. Rough figures to remember are that the computer is about
1 million times as fast as a good clerk, that it is also about 1 million
times as accurate and that it will work 24 hours a day without complaining.

Again let us review the parts of a computer.

SLIDE 8. Necessary Parts of a Computer 
An Arithmetic unit 
A memory
Built-in Decision unit 
Input-Output mechanisms

And aLso remind ourselves as to what we want the computer to do.

SLIDE 9. Functions assigned to the Computer 
Accept a set of instuctions in advance 
Accept input data 
Prompt the user for needed data 
Do the complete calculation 
Report the results

We have also had something to say about the need to use other programs.
As some one has put it, we want to stand on other programmers' shoulders
not step on their toes.  As we shall see, some of the programs that we
will find useful are shown on the next slide.

SLIDE 10. Using Other's Programs 
Operating-system program 
Phone-monitor program 
Time sharing program 
File management program 
The text editor program 
The compiler program

An while we are at it, let us anticipate a little an see what steps we
will have to take in using a computer.

SLIDE 11. Steps in Using a Computer 
Analyse the problem 
Chose a computer language 
Write the program 
Compile the program 
Fix compiler-detected bugs
Recompile the program 
Run the program

So far, I have said little about the sub-set of English that one chooses
to use in writing a computer program.  This is a sore point because just about
everybody has his own idea as to what this subset should be.  When I first
started programming I had to write in the machine's internal language, and
what a task that was.  Then we devised something that was called an
Assembly Language which was a step above the original machine language
because English words were used instead of numbers and the Assembly
program takes care of certain bookkeepinng problems. As a matter of fact,
when wants to write a program that will operate as fast as possible, one
still,even today, finds if desirable to write in an assembly language.

Along about 1952 work was started on the first serious attempt to design a
higher level language. This language became known as FORTRAN, short for
FORMULA-TRANSLATION.  At the present time, well over 150 different
languages are in common use.  The next slide shows a few that I have had
to learn.

SLIDE	12. Languages I have Known 
1954	FORTRAN		1964	BASIC 
1959	ALGOL		1964	PL/1 
1959	MAD		1965	APL 
1960	JOVIAL		1966	SAIL 
1960	COBAL		1970	PASCAL 
1961	NELIAC		1976	ADA 
1962	LISP		1979	VisaCalc

I have labeled this slide Languages I Have Known, to emphasise the fact
that it is quite impractical to stay conversant in more than a few
computer languages for any length of time. Computer languages are new
languages and they keep changing.  On learning a new language, one tends
to forget the older ones, although, having once learned a language, it is
much eaasier to reacquaint yourself with a previously learned language
than it is to learn an absolutely new language from scratch.  Fortunately,
computer languages tend to fall into a few main classes, just as  natural
fall into classes and having learned one language in a given class, it
then becomes easier to learn another language in the same class.

We now have just about all the background information we need to begin
the task of writing an actual computer program.

Picking a suitable problem proved to be rather difficult.  People are always
asking me if I use the computer to prepare my income tax, and the answer
is no.  It is not because I could not do it but because it wuld be harder
to write the program than it is to fill out the forms in the first place.
If I had to fill out one hundred such forms or even if the forms would
stay the same from year to year, it might be different.  So this is not a
good example for me to use.

Perhaps some of you have been wondering about the wisdom of investing in
one of these All-Savers Certificates. The papers have been full of advice
so we hardly need a computer program to advise us, but anyway I thought
that this might be a simple problem.  Rather than going into all of the
ramifications, I thought we might write a program to prepare a simple
table showing the cross-over point where it would be desirable to sell
some securities that now yield a given percentage as a function of the tax
bracket one might be in.

So let's consider this problem. The analysis is shown on the next slide.

SLIDE 13. Assume $100 invested 
Income in dollars		INCOME = 100 times yield
Uncle Sam gets 			bracket times yield times 100 
You keep 			KEEP = 100 times (1 - bracket) times yield 
In ALL-SAVERS 			KEEP = 12.6 
Break-even point 		12.6 = 100 times (1 -- bracket) times yield 
Or 				bracket =1 - (12.6 div yield div 100) 
Expressed in percent 		BRACKET = 100 - (1260 div YIELD)

Well, that's a chore! It illusrates another truism about computers.

SLIDE 14.  A computer is no substitute for Thought

Now I have to decide on the type of computer that we are going to be
using.  It would be nice if I could anticipate the kind of computer you
are apt to be using.  Unfortunately, as in any new field, there are many
diferent types of home computers on the market.  Some are little more than
drssed up calculators.  Sam Vaughn has one of these.  Others are miniature
versions of large stand alone computers.  The computer that you are apt to
use, or at least the kind I would recommend can be thought of as an
intelligent terminals, actually a small computer in its own right but
still capable of acting as a terminal for larger centrally available
computers.  Such a computer has a slightly modified typewriter for the
input devise and a television-like viewing screen as an output device,
although it is also possible to add a printer.

You will want to have some computing power locally so that you need not
pay for time on the large central computer, and also because you might not
want to store some kinds of data at a remote site. On the other hand there
will be many things that you will want to do that will require more
computing ability than you will want to pay for in your home computer.
Then you will want to have access to many files of information that others
will keep up to date, air plane schedules, stock market quotations,
weather reports,the latest news, a library of books that you may want to
consult or read on your home terminal etc.

The terminal that I have in our apartment can be thought of as a for
runner of what will soon be available to everyone, so I will describe how
to use this terminal.

I sit down at my terminal in Apartment 2-J, turn it on and dial a phone
number that will connect me to one of the computers at Stanford.  When the
computer answers, and I know this by hearing a whistling sound, I throw a
switch that connects my terminal to the phone line, where-upon the
terminal whistles back to the computer and so completing the connection.
I then hang up my phone and I can begin to type to the computer.  Actually
I am not really typing instructions directly to the computer, since all it
can understand are numbers.  Instead, the typing that I do will be treated
as input data to a part of the operating system that runs continuously in
the computer, just waiting for information to be typed in.  The operating
system that runs on the Stanford computer that I will be using happens to
be a TIME-SHARING system.  Such a system allows a relatively large number
of users to communicate with it on a shared basis.  The computer is so
very fast that I am seldom aware of the fact that it is switching from
user to user and taking care of as many as 100 diferent people all at the
same time.  Writing the time-sharing system was a horrendous task and
many people have worked on it over a number of years. Fortunately, we
do not have to worry about it, we just use it.

There are different types of time-sharing systems.  The computer we will
be using operates as a general purpose time-sharing system since it can be
used for all sorts of purposes. Most general purpose systems allow one to
use a variety of different languages altho there are a few systems that
only allow one to use a single language.

There is a second type of system exanplitied by the air-plane reservation
system that is operated from thousands of different terminals at air ports
and in travel agency offices all over the world. This is a
common-data-base system, in that all of the users must finally read or
make changes to a common listing of seats available, seats reserved ans
seats ticketed for all the various air lines both in this country and
abroad.  The individual user has no control over the prgrams that are
stored in the system and there must be all sorts of controls to prevent
the simultaneous booking of the same seat and other such adverse
interactions between users.

But to get back to our problem.
Actually when I hit a key on my terminal, a whole sequence of events must
occur before the letter that I have typed appears on my screen.  The
whistles that my terminal sends is first translated into a number, this
number is then stored temporarily.  The main operating system gets around
to looking at this number after tending to perhaps twenty or thirty other
people who are also typing at the same time.  It does all this, on the
side, as it is actually spending most of its time running programs for
several other users. When the operating system gets around to me it
verifies that what I have typed was in fact a character that is suitable
for displaying on my terminal and it then sends out a whistle to my
terminal acknowledging that such and such a letter has been recieved and
my terminal then translates this whistle into a mattrix of dots that
represents the character and displays this on the screen.  The computer is
about a million times as fast as a person might be at doing many things,
so all of this happens in a time that is too small for me to realize that
there has been any delay at all.

My first task is to log-in, that is tell the computer that I want to work,
this I do by typing the letter L and a three letter code which happens to
be my initials, by which I am known to the log-in program portion of the
operating system.  Finding my initials on the list of authorized users,
the login program will ask for my secret password and if I type this
correctly the operating system program will accept me as a legitimate user
and let me know that it is ready for my further commands.

Frequently, when I log-in there will be some mail waiting for me and the
operating system will now inform me of this fact.  Our computer at
Stanford is tied in to the ARPA network. an interconnected network of
computers, mostly in this country but with some abroad that can
communicate with each other.

The other day, for example, I found a message for me from a man in
Australia who was inquiring about the availability of a certain text
editing program that I currently have the responsibility for maintaining.
So, before attending to the new problem, I might want to mail an answer to
my friend.  If the answer is a short one, I can type it in directly to a
special MAIL program that will take care of establishing the necessary
connection to the computer that my friend uses and of then sending the
message. Alternatively, I can arrange for still another program to
transfer an entire document from my computer to his computer.  Having
consigned my reply to the mail program or to the file transfer program, I
am free to attend to the current problem, without having to wait for the
action that I have authorized to be completed.

I now ask the operating system program to start up a text-editing program.
This program is able to collect the text that I will be typing and store
it away in a file that I will specify.  Actually, this editor is a very
powerful program in its own right and it supplies all sorts of nice
editing functions.  I can ask it to display selected portions of my file
on the screen, to move blocks of text around, to delete or insert
characters or words as required, all of this with a minimum of keystrokes
on my part.  I can use it to count all of the occurances of a single
character or string of characters in my entire document or to replace all
such occurrances by a completely different string of characters that I
specify, all this in a twinkling of an eye.  It can even be used to
extract portions of text from one document file and move the selected
portion to another file.

Since I am starting a new file I type CET, the C meaning CREATE and ET
being the name of the editor that I want to use. So I type CET YIELD.PAS
where YIELD.PAS is the name that I am asigning to this program.  In this
case, I anticipate a little and add the extension .PAS to show that the
file is to be written in the PASCAL language.

The operating system lets me know when it is ready for me to type by
displaying a period at the start of a line and the Text Editor tells me
that it is ready by displaying an asterisk, so I can keep track of which
program I am typing to.

So now I am typing to the Editor and I type:

SLIDE 15.  Program YIELD(OUTPUT);<cr> 
var BRACKET,YIELD : integer;<cr>
begin<cr> 
BRACKET := 100 --(1260 div YIELD);<cr> 
end.<cr

Now what have I typed?  The first line tells the compiler that this is to
be a program to be called YIELD and that there is to be an output file
that is to be written.

The next line says that we will want to consider various values for tax
BRACKETS and current YIELDS and we want to express these as integers, that
is in simple whole numbers for the different percentages.  the compiler
will take care of assigning locations in the computers memory where these
numbers are to be stored.

The cells in the computer's memory can be likened to a set of open
mailboxes into which slips of paper may be placed and on which a number
may be written.  When the compiler sees a name specified as a variable, it
assigns one of the remaining empty boxes to this variable.  Actually the
name assigned to the box is not written on the box but instead the number
of the box and its assigned name are added to a directory list.  During
the rest of the compiling process, when ever a name is encountered, the
compiler looks it up in the directory and simply replaces the name by the
box number.

The third line simply says that we are now ready to start listing what the
computer is to do with these quantities. The next statement is the
relationship that is to exist between the two variables, and the last line
says that this is all.

This really isn't all we should type, but just to see what happens, let's
tell the editor that it is, which we do typing the letter E for End while
holding down a special kind of shift key that tells the editor that we
really mean END and not just that we want the letter E to be stored in the
file. Incidentally, one of the nice things about using a computer, as
compared with, say, driving an automobile, is that it is hard to do any
damage, so if you want to see what happens when you give a certain command
you just try it.

I now will be back typing to the operating system program and I can tell
the operating system to start up still another program, the compiler to
compile my program.  I can also simply type EX for execute and the name of
the program.  This calls up still another program that takes care of first
compiling and then of running the compiled program. You will note that I
do not have to tell the operating system what compiler to use that was
contained in the .PAS that was part of the name.

Strangely enough, the compiler compiles this program without complaining
but the operating system complains when it tries to run the program by
reporting that we tried to divide by zero which is a no no.

SLIDE 16.  ZERODIVIDE AT USER PC 400020

Think Harder When You Use a Computer

We told the computer to divide the number 1260 by the YIELD but we did not
tell it to use what value for the yield. The computer refuses to divide by
zero since the answer would be infinity and while it can count up to a
very large number, it has no way to represent infinity.  The computer did
not type the moral but I thought you should be told.

Actually we were fortunate, in that our first try actually did compile.
Normally one does not get even this far the first time.  So one goes
through a process of writing, compiling, fixing the errors the compiler
found, recompiling, etc. until the program compiles, then trying to run
the compiled program, only to find that it will not run, going back to
step one, fixing the errors, and on and on until the program finally does
what one wanted it to do in the first place.

We will not have time make as many mistakes as one might actually do so I
will show you the resulting program on the next slide.

SLIDE 17.  program YIELD(OUTPUT); 
var BRACKET,YIELD : integer; 
begin
writeln('Current Tax'); 
writeln('yield bracket'); 
for YIELD:=13 to 30 do
begin 
BRACKET :=100 -- (1260 div YIELD); 
if BRACKET <= 50 then writeln(YIELD:3,BRACKET:9); 
end; 
end.

Incidentally, this program, as I show it on the screen, has been
prettyed-up to make it easier to read.  One doesn't usually go to all of
this bother, the computer doesn't pay any attention to such floss, it is
only to help us poor humans.

So, what do we have?

I have already explained the first three lines.  The next two lines tell
the compiler that we want two lines of text written into our output file.

The sixth line is something new. We are telling the compiler to set the
YIELD value at 13, then to increase it (in steps of 1) until it reaches 30
and for each of these values to do the operations specified between the
word BEGIN which follows down to the matching END which terminated the
list of things to do.  You will note that we use the words BEGIN and END
like nested parentheses.  We have to do this because parentheses are
already used for another purpose and the compiler is not smart enough to
allow symbols to be used with multiple meanings as determined by the
context as we do all the time.  Because we use the words begin and end in
this way we are not allowed to uses these words for any other purpose.
For example, we would get into trouble if we tried to name a variable
BEGIN.

The next line is the relation that we started with, but now our old
divide-by-zero trouble has been fixed since we have already specified the
range of values that are to be assigned to YIELD.

If we were to stop here the computer would obligingly do the calculations
but the results would never be written out, so we tell it to write a line
containing the value of yield that was used in the calculation, allowing 3
spaces for this number. then listing the resulting Bracket values,
allowing 9 spaces for this number, which is more than we need but which
allows some blank space between the numbers.

I have added some floss here.  Since the maximum income tax bracket is to
be 50%, it seems senseless to continue outputting lines of text when the
calculations give larger values so I have said to list the results only if
BRACKET is less than or equal to 50.

Finally we need two ends, one to mark th end of the things that are to be
done for each value of yield and the second end to end it all.

So now to see the results:

SLIDE 18.  CURRENT TAX 
YIELD BRACKET 
13 4 
14 10 
15 16 
16 22 
17 26 
18 30 
19 34 
20 37 
21 40 
22 43 
23 46 
24 48 
25 50

That's really all there is to it.  Now, of course, if we have the task of
writing a computer program for a really complicated problem we will have a
lot more work to do.  But just as in this case, well over half of the job
will be in understanding the problem.

So it is time to review the lessons that we have learned.

SLIDE 19. Lessons to be Learned 
The computer is no substitute for thought
Think harder when you use a computer 
Garbage in garbage out 
Always using work of others 
People not computers make mistakes

I might also contrast the present situation with respect to the way
computers are being used with the way they will be used in the near future
and perhaps have a word to say about the long range future.

SLIDE 20. How computers are being used 
Accounting 
Scientific problem solving 
Process control 
Information retrieval

SLIDE 21. How computers will be used 
Tele-typed messages 
Personal computing 
Ordering merchandise 
Paying bills 
Personal newspapers

SLIDE 22 The Future 
Self-steering cars 
Automatic factories 
Speech recognition 
Language translation 
Direct access libraries 
The automated home

The computer always does what it is told to do, if we tell it to do
foolish things it does foolish things.  as we learn more and more about how
to tell it to do desirable things it will do more and more useful things
for us.

------------------

SLIDE 23. Problems in using computers 
Wrong input data 
No human perception
Rigid behavior 
Fraud protection

SLIDE 24.  To err is human, but
	to really foul things up
	   requires a computer
		------
	   An all too powerfull tool
	    in the hands of
	   an all too fallible person
SLIDE 1. A bit of history
SLIDE 2. Charles Babbage
SLIDE 3. Lady Lovelace
SLIDE 4. The Analytical Engine has no pretensions whatever to originate
SLIDE 5. This Strange New Specie
SLIDE 6. What's Wrong when Computers Get Blamed
SLIDE 7. Why we need computers
SLIDE 8. Necessary Parts of a Computer
SLIDE 9. Functions assigned to the Computer
SLIDE 10. Using Other's  Programs
SLIDE 11. Steps in Using a Computer
SLIDE 12. Languages I have Known
SLIDE 13. Assume $100 invested
SLIDE 14.  A computer is no substitute for Thought
SLIDE 15. Program YIELD(OUTPUT);<cr>
SLIDE 16. ZERODIVIDE AT USER PC 400020
SLIDE 17.    program YIELD(OUTPUT);
SLIDE 18. The output
SLIDE 19. Lessons to be Learned
SLIDE 20. How computers are being used
SLIDE 21. How computers will be used
SLIDE 22  The Future
----------------------
SLIDE 23. Problems in using computers
SLIDE 24. To err is human but to really foul things up requires a computer.
			   Computers Revisited

				 Abstract

1.  A confession
2.  Education vs. Entertainmeent
3.  Computers are too simple
4.  Two years to understand the inner workings
5.  Using TV or computer without detailed understanding

6.  Charles Babbage in 1833
7.  Lady Lovelace understood
8.  Lady Lovelace the first programmer
9.  I also programmed for machine that never was built

10. Keeping record is very dull
11. Accounting antedated the invention of writing
12. The abacus and other early mechanical devices
13. Positional notation
14. Calculators vs. computers

15. Two necessary attributes to be called a computer
16. People not computers make all of the decisions
17. The Analytical Engine has no pretentions
18. No real progress from 1871 until late 1930's

19. Influence of the war
20. Silicon chips
	Computer games and other uses
	Home computers
21. Other people help with auxillary programs

22. The Urdu servant analogy
23. Hiring a translator or a linguist
24. Explanations can be in Urdu
25. The need for a restricted language
26. The need for ahead-of-time translations
27. The compiler
28. The need for a filing system and name extensions
29. The Urdu servant is really a computer

30. Large body of service programs
31. Software vs. hardware and unbundling
32. The computer with its software as The Computer

33. Time to show a few slides.
	Slide 1  A bit of history
	Slide 2  Charles Babbage
	Slide 3  Lady Lovelace
	Slide 4  The analytical engine
	Slide 5  This strange new specie

	Slide 6  Why computers get blamed
	Slide 7  Why we need computers
	Slide 8  Necessary parts of a computer
	Slide 9  Functions assigned to the computer
	Slide 10 Using other's programs

	Slide 11 Steps in using a computer
	Slide 12 Languages I have known

	Slide 13 The all-savers problem
	Slide 14 The computer is no substitute for thought

34. Two kinds of home computers at present (Sam Vaughn's and others)
35. The inteligent terminal approach to computing
36. Log-in procedure and the mail service
27. Starting a Text editor and naming a file

28. Writing the program
	Slide 15 The first steps
	Slide 16 Divide-by-zero trouble
	Slise 17 The complete program
	Slide 18 The output

29. Reviewing the lessons that we have learned
	Slide 19 Lessons to be learned

30. Computer usage now and in the future
	Slide 20 How computers are being used
	Slide 21 How computers will soon be used
	Slide 22 The long-range future.

31. Summary
	The computer always does what it is told to do, and its future is
unbounded.

SLIDE 23. Problems in using computers 
Wrong input data 
No human perception
Rigid behavior 
Fraud protection

SLIDE 24.  To err is human, but
	to really foul things up
	   requires a computer
		------
	   An all too powerfull tool
	    in the hands of
	   an all too fallible person
How to Become a Computer Programmer in One Easy Lesson

On Friday October 9th, Arthur Samuel will talk on the subject: Computers
Revisited. By taking us, step by step, through the process of writing a
computer program to solve a simple problem, Art will show us that
computers are not at all magical, but are really quite easy to understand.

Art has also promised to include some of the same material that was
contained in his previous talk here at The Sequoias, both for the benefit
of those who did not hear this earlier talk and as a review for those who
did.
program YIELD(OUTPUT);
var  BRACKET,YIELD: integer;
begin
writeln('Break even Bracket in terms of current yield');
writeln('current   Tax');
writeln('yield   bracket');
for YIELD:=13 to 30 do
begin BRACKET :=100 -(1260 div YIELD);
if BRACKET <= 50 then writeln(YIELD:3,BRACKET:9);
end; end.